L'istruzione GROUP BY raggruppa le righe con gli stessi valori in righe di riepilogo, ad esempio "trova il numero di clienti in ciascun paese".
L'istruzione GROUP BY viene spesso utilizzata con funzioni di aggregazione (COUNT(), MAX(), MIN(), SUM(), AVG()) per raggruppare un set di risultati in base a una o più colonne.
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s)
Quello che segue è un esempio della tabella "Customers" ("Clienti") del database "Northwind":
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
La seguente istruzione SQL elenca il numero di clienti in ciascun paese:
Run SQLSELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
La seguente istruzione SQL elenca i clienti in ciascun paese, ordinati dal più alto al più basso:
Run SQLSELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC
Quello che segue è un esempio della tabella "Orders" ("Ordini") del database "Northwind":
ProductID | OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
---|---|---|---|---|---|
1 | 10248 | 90 | 5 | 1996-07-04 | 3 |
2 | 10249 | 81 | 6 | 1996-07-05 | 1 |
3 | 10250 | 34 | 4 | 1996-07-08 | 2 |
4 | 10251 | 84 | 3 | 1996-07-08 | 1 |
5 | 10252 | 76 | 4 | 1996-07-09 | 2 |
E l'esempio dalla tabella "Shippers" ("Mittenti"):
ShipperID | ShipperName | Phone |
---|---|---|
1 | Speedy Express | (503) 555-9831 |
2 | United Package | (503) 555-3199 |
3 | Federal Shipping | (503) 555-9931 |
La seguente istruzione SQL elenca il numero di ordini inviati da ciascun mittente:
Run SQLSELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
LEFT JOIN Shippers
ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName